﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;

namespace zielonka.co.uk.extensions.system
{
    /*
     * 
        Description:	Parse a string to any other type including nullable types.
     * 
        // regular parsing
        int i = "123".Parse<int>(); 
        int? inull = "123".Parse<int?>(); 
        DateTime d = "01/12/2008".Parse<DateTime>(); 
        DateTime? dn = "01/12/2008".Parse<DateTime?>();


        // null values
        string sample = null; 
        int? k = sample.Parse<int?>(); // returns null
        int l = sample.Parse<int>();   // returns 0
        DateTime dd = sample.Parse<DateTime>(); // returns 01/01/0001
        DateTime? ddn = sample.Parse<DateTime?>(); // returns null
    */

    public static partial class StringExtensions
    {
        public static T Parse<T>(this string value)
        {
            // Get default value for type so if string
            // is empty then we can return default value.
            T result = default(T);
            if (!string.IsNullOrEmpty(value))
            {
                // we are not going to handle exception here
                // if you need SafeParse then you should create
                // another method specially for that.
                TypeConverter tc = TypeDescriptor.GetConverter(typeof(T));
                result = (T)tc.ConvertFrom(value);
            } return result;
        }
    }
}
